﻿
/**
 * 在使用XMLHttpRequest对象进行异步传输的时候，由于有缓存的存在，有可能使你的下次的请求是从缓存里读取的，一种方法是我经常用的，就是在请求页面上再加个参数，传递当前的时间，这样，服务器才会把每次请求当作新的请求，总结了下，有以下三种方法实现：
 * 第一种，例如：url="default.aspx?id="+id+"&dt="+new Date().getTime()
 * 第二种，例如：url="default.aspx?id="+id+"&dt="+Math.random()
 * 第三种，例如：xmlhttp.setRequestHeader("Cache-Control","no-cache") 
 */
util.XmlHttpUtil = function(url,encoding,async){
	this.url = url;
	this.xmlHttp = null;
	
	if(!async){
		async = false;
	}
	this.async = async;//同步或异步方式
	
	//传送数据的方式
	this.SEND_GET = "get";
	this.SEND_POST = "post";
	
	//编码格式
	this.encoding_GBK = "GBK";
	this.encoding_UTF_8 = "utf-8";
	this.encoding = encoding;
	if(!this.isNull(encoding)){
		this.isEscape = true;
	}
}

util.XmlHttpUtil.prototype = {
	isNull:function(value){
		if(value==null || value=="" || value=="undefined"){
			return true;
		}
		return false;
	},
	createXMLHttpRequest:function(){
		if(window.ActiveXObject){
			this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}else if(window.XMLHttpRequest){
			this.xmlHttp = new XMLHttpRequest();
		}
	},
	sendData:function(url,method,responseMethod,paraArr,xml){
		url += "&rnd="+(new Date());//在url里加一个随机数，相当于清除缓存
		this.createXMLHttpRequest();
		if(method==null) method=this.SEND_POST;
		this.xmlHttp.open(method,url,this.async);//打开连接
		var selfObj = this;
		var xmlHttp = this.xmlHttp;
		xmlHttp.onreadystatechange = function(){
			if(xmlHttp.readyState==4){
		    	if(xmlHttp.status==200){
		    		var result = xmlHttp.responseText.trim();//服务器返回的信息
		    		//alert("result = " + result);
		    		try{
		    			eval(responseMethod+"(result)");
		    		}catch(e){
		    			//alert("没有方法:" + responseMethod + "(result)");
		    			response(result,paraArr);
		    		}
		    	}
	 		}
		};
		if(method==this.SEND_POST){
			if(this.isEscape){//转换编码格式
				xml = escape(xml,this.encoding);
			}
			this.xmlHttp.send(xml);//向服务器发送xml数据流。
		}else{
			this.xmlHttp.send("");
		}
	},
	//验证唯一性,valValue为验证的值，按照传参数的方式传进来
	doCheckSaveUnique:function(valValue,paraArr){
		var url = this.url + "?action=doCheckSaveUnique&" + valValue;
		this.sendData(url,this.SEND_GET,paraArr);
	}
}

String.prototype.trim = function(){
	return this.replace(/^\s*|\s*$/g,"");
}